Multithreading - barrier
Barrier objects are used to wait for a fixed number of thread to complete execution before any particular thread can proceed forward with is execution
Demo#
- sleep function simulate to work load
- init barrier for 2 threads
- thread
t2wait fort1on barrier - when
t1reach the barrier both threadst1, t2can continue
barrier
import threading
import logging
import time
log = logging.getLogger(__name__)
logging.basicConfig(
level=logging.INFO,
format="[%(asctime)s] [%(name)s] %(levelname)s - %(message)s",
datefmt="%H:%M:%S",
)
def job(name: str, wait_time: int) -> None:
log.info(f"Thread {name} running")
time.sleep(wait_time)
log.info(f"Thread {name} wait on barrier")
barrier.wait()
log.info(f"Thread {name} continue running")
barrier = threading.Barrier(2)
t1 = threading.Thread(target=job, args=("t1", 5))
t2 = threading.Thread(target=job, args=("t2", 3))
t1.start()
t2.start()
result#
[07:17:58] [__main__] INFO - Thread t1 running
[07:17:58] [__main__] INFO - Thread t2 running
[07:18:01] [__main__] INFO - Thread t2 wait on barrier
[07:18:03] [__main__] INFO - Thread t1 wait on barrier
[07:18:03] [__main__] INFO - Thread t1 continue running
[07:18:03] [__main__] INFO - Thread t2 continue running